home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 43 / Amiga Format CD43 (1999)(Future Publishing)(GB)(Track 1 of 2)[!][issue 1999-09].iso / -serious- / comms / other / ums / rexx / wakeup.rexx < prev    next >
OS/2 REXX Batch file  |  1999-06-14  |  5KB  |  201 lines

  1. /* ------------------------------------------------------------------------
  2.  
  3.   WakeUp.rexx --
  4.  
  5.   Get sleeping user out of bed by softly talking to him.
  6.  
  7.   Requirements: upd running.
  8.   (Could be easily changed to use "SPEAK:" or "Utilities/Say" instead.)
  9.  
  10. ------------------------------------------------------------------------ */
  11.  
  12. options results
  13.  
  14. RC = 0
  15.  
  16. signal on BREAK_C
  17. signal on BREAK_D
  18. signal on BREAK_E
  19. signal on BREAK_F
  20. signal on ERROR
  21. signal on HALT
  22. signal on IOERR
  23. signal on SYNTAX
  24.  
  25. /*** Init ***/
  26.  
  27. call addlib("rexxdossupport.library", 0, -30)
  28. call addlib("ums.library", 0, -210, 11)
  29. call UMSInitConsts()
  30.  
  31. /*** Arguments ***/
  32.  
  33. ProgramName = "ReadMessage";
  34. ArgsTemplate = "NAME,PASSWORD,SERVER/K"
  35. args.SERVER = ""
  36. args.PASSWORD = ""
  37.  
  38. parse arg arguments
  39. if strip(arguments) = '?' then do
  40.   call writech(STDOUT, ArgsTemplate || ': ')
  41.   arguments = readln(STDIN)
  42. end; else nop
  43. if ~ReadArgs(arguments,ArgsTemplate,"args.") then do
  44.   say Fault(RC, ProgramName)
  45.   exit 10
  46. end; else nop
  47.  
  48. /*** Login ***/
  49.  
  50. account = UMSLogin(args.name, args.password, args.server)
  51. if account = 0 then do
  52.   say "unable to login."
  53.   exit 10
  54. end
  55.  
  56. /*** Do the magic ***/
  57.  
  58. call UMSSelectField(account,L,UMSMakeFlags(0),,,,UMSCODE_GROUP,"",1);
  59. call CheckErr
  60. call UMSSelectField(account,L,UMSMakeFlags(1),,,,UMSCODE_FOLDER,"",1);
  61. call CheckErr
  62. call UMSSelectFlags(account,L,UMSMakeFlags(2),,,,U,UMSMakeFlags(UMSUSTAT_OLD,UMSUSTAT_READACCESS,UMSUSTAT_VIEWACCESS),UMSMakeFlags(UMSUSTAT_READACCESS,UMSUSTAT_VIEWACCESS));
  63. call CheckErr
  64. newmail = UMSSelectFlags(account,L,UMSMakeFlags(3),,,,L,UMSMakeFlags(0,1,2),UMSMakeFlags(0,1,2));
  65. call CheckErr
  66. say "New mails:" newmail
  67.  
  68. address PLAY
  69. 'ID Intercom'
  70.  
  71. if newmail = 0 then
  72.   'say sorry, no mail for you.'
  73. else if newmail = 1 then
  74.   'say There is a new mail for you.'
  75. else
  76.   'say There are ' || number(newmail) || ' new mails for you.'
  77.  
  78. i = 0
  79. do forever
  80.   i = UMSSearchFlags(account,L,UMSMakeFlags(3),UMSMakeFlags(3),i);
  81.   if i = 0 then leave
  82.   drop msg.
  83.   call UMSReadMsgHeader(account,i,msg.,1);
  84.   call CheckErr
  85.   say i center(msg.UMSCODE_FROMNAME,24) || ":" left(msg.UMSCODE_SUBJECT,48)
  86.   'say from (' msg.UMSCODE_FROMNAME '),' translate(msg.UMSCODE_SUBJECT,",-",":/") '.'
  87. end
  88.  
  89. call UMSSelectFlags(account,L,UMSMakeFlags(4),,,,U,UMSMakeFlags(UMSUSTAT_SELECTED),UMSMakeFlags(UMSUSTAT_SELECTED));
  90. call CheckErr
  91. newnews = UMSSelectFlags(account,L,UMSMakeFlags(5),,,,L,UMSMakeFlags(2,3,4),UMSMakeFlags(2,4));
  92. call CheckErr
  93. say "New selected news:" newnews
  94.  
  95. if newmail = 0 then intro = "But"
  96. else intro = "And"
  97. if newnews = 1 then
  98.   'say ' intro 'there is one new news addressed to you.'
  99. else if newnews > 0 then
  100.   'say ' intro 'there are ' || number(newnews) || ' new news addressed to you.'
  101.  
  102. lastgroup = ""
  103. i = 0
  104. do forever
  105.   i = UMSSearchFlags(account,L,UMSMakeFlags(5),UMSMakeFlags(5),i);
  106.   if i = 0 then leave
  107.   drop msg.
  108.   call UMSReadMsgHeader(account,i,msg.,1);
  109.   call CheckErr
  110.   if msg.UMSCODE_GROUP = lastgroup then do
  111.     intro = ""
  112.   end; else do
  113.     lastgroup = msg.UMSCODE_GROUP
  114.     say "newsgroup:" lastgroup
  115.     intro = "In newsgroup (" || lastgroup || "),"
  116.   end
  117.   say i center(msg.UMSCODE_FROMNAME,24) || ":" left(msg.UMSCODE_SUBJECT,48)
  118.   'say ' || intro || ' from (' msg.UMSCODE_FROMNAME '),' translate(msg.UMSCODE_SUBJECT,",-",":/") '.'
  119. end
  120.  
  121.  
  122.  
  123. if newmail > 0 then
  124.   'say ok, thats all.'
  125.  
  126. call HALT
  127.  
  128.  
  129. /*** ***/
  130.  
  131. number: PROCEDURE
  132.   n = arg(1)
  133.   if n < 0 then n = "minus " || number(-n)
  134.   else if n = 11 then n = "eelaven"
  135.   else if n = 12 then n = "twelve"
  136.   else if n = 13 then n = "thirteen"
  137.   else if n = 15 then n = "fifteen"
  138.   else if (n > 13) & (n < 20) then n = (n // 10) || "teen"
  139.   else if n = 20 then n = "twenty"
  140.   else if (n > 20) & (n < 30) then n = "twenty " || (n // 10)
  141.   else if n = 30 then n = "thirty"
  142.   else if (n > 30) & (n < 40) then n = "thirty " || (n // 10)
  143.   else if n = 40 then n = "fourty"
  144.   else if (n > 40) & (n < 50) then n = "fourty " || (n // 10)
  145.   else if n = 50 then n = "fifty"
  146.   else if (n > 50) & (n < 60) then n = "fifty " || (n // 10)
  147.   else if n = 60 then n = "sixty"
  148.   else if (n > 60) & (n < 70) then n = "sixty " || (n // 10)
  149.   else if n = 70 then n = "seventy"
  150.   else if (n > 70) & (n < 80) then n = "seventy " || (n // 10)
  151.   else if n = 80 then n = "eighty"
  152.   else if (n > 80) & (n < 90) then n = "eighty " || (n // 10)
  153.   else if n = 90 then n = "nine-tee"
  154.   else if (n > 90) & (n < 100) then n = "nine-tee " || (n // 10)
  155.   else if n = 100 then n = "one hund-red"
  156.   else if n > 100 then n = number(n % 100) || " hund-red and " || number(n // 100)
  157. return n
  158.  
  159.  
  160. /*** Final cleanup ***/
  161.  
  162. BREAK_C:
  163. BREAK_D:
  164. BREAK_E:
  165. BREAK_F:
  166. ERROR:
  167. HALT:
  168. IOERR:
  169. SYNTAX:
  170.  
  171. IF RC ~= 0 THEN DO
  172.   SAY "Error: " rc errortext(rc) "Line" sigl
  173. END
  174.  
  175. /*** Logout ***/
  176.  
  177. if account ~= 0 then do
  178.   call UMSLogout(account)
  179.   account = 0
  180. end
  181.  
  182. exit 0
  183.  
  184. /*** Support ***/
  185.  
  186. CheckErr: procedure expose account
  187.   err = UMSErrNum(account)
  188.   if err ~= 0 then do
  189.     say "UMS Error #" || err || ": " || UMSErrTxt(account)
  190.   end
  191. return
  192.  
  193. FlagToStat: PROCEDURE
  194.   flags = arg(1)
  195.   status = '';
  196.   do i = 0 by 1 for arg()-1
  197.     if BITTST(flags,i) THEN
  198.       status = status arg(i+2)
  199.   end;
  200. return status
  201.